package com.train.mgr.modules.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.train.common.model.PageParam;
import com.train.common.model.PageResult;
import com.train.mgr.modules.biz.dto.request.*;
import com.train.mgr.modules.biz.dto.response.EmployeeRespDTO;
import com.train.mgr.modules.system.dto.request.UserPageReqDTO;
import com.train.mgr.modules.system.dto.request.UserPassReqDTO;
import com.train.mgr.modules.system.dto.request.UserReqDTO;
import com.train.mgr.modules.system.dto.response.UserRespDTO;
import com.train.mgr.modules.system.entity.User;

import java.util.List;

/**
 * @author cxg
 * @desc
 * @date 2023/02/01 16:35
 **/
public interface UserService extends IService<User> {

    /**
     * 新增用户
     *
     * @param body
     * @return
     */
    Integer add(UserReqDTO body);

    /**
     * 删除用户
     *
     * @param ids
     * @return
     */
    Integer delete(List<Long> ids);

    /**
     * 更新用户
     *
     * @param body
     * @return
     */
    Integer update(UserReqDTO body);

    /**
     * 获取用户详情
     *
     * @param id
     * @return
     */
    UserRespDTO get(Long id);

    /**
     * 分页
     *
     * @param params
     * @return
     */
    PageResult<UserRespDTO> page(UserPageReqDTO params);

    /**
     * 根据username查询用户
     *
     * @param userId
     * @param username
     * @return
     */
    User getByUsername(Long userId, String username);

    /**
     *
     * @param userId
     * @param username
     * @param userType
     * @return
     */
    User getByNameAndType(Long userId, String username,String userType);

    /**
     * 启用停用
     *
     * @param userId
     * @param status
     * @return
     */
    Integer changeStatus(Long userId, Integer status);


    /**
     * 退出本账号
     */
    void logout();

    /**
     * 修改密码
     *
     * @param dto
     * @return
     */
    Integer modifyPass(UserPassReqDTO dto);

    User getByOpenIdUserType(String openId, Integer userType);

    User getByUserNamePassword(String username, String password, Integer userType);


    Integer addEmployee(EmployeeReqDTO dto);//新增员工
    Boolean checkName(CheckEmpReqDTO body);;
    Integer updateEmployee(EmployeeReqDTO dto);//更新员工
    UserRespDTO getEmpUserById(Long userId);//员工个人信息详情
    PageResult<EmployeeRespDTO> pageEmpList(EmpQueryReqDTO params);//分页查询单位员工列表
    PageResult<EmployeeRespDTO> findNotCourseUserList(EmpQueryReqDTO params);//获取企业员工列表-过滤去掉已加入课程的员工
    boolean saveExcelData(List<EmpImportDTO> importList);
    List<EmpImportDTO> checkExcelData(List<EmpImportDTO> importList);

    PageResult<EmployeeRespDTO> checkEmployeeList(PageParam params);//获取企业员工待审核的用户列表

    Integer updateUserEnable();

    Integer clearUserWxOpenId(Long userId);

    Integer stopUserEnabled(Long enabled);

    boolean batchEmpCheck(BatchIdsDTO dto);//批量员工审核

}
